package com.bjpowernode.service.impl;

import com.bjpowernode.entity.TActivityRemark;
import com.bjpowernode.mapper.TActivityRemarkMapper;
import com.bjpowernode.query.ActivityRemarkQuery;
import com.bjpowernode.service.ActivityRemarkService;
import com.bjpowernode.util.LoginInfoUtil;
import com.github.pagehelper.PageInfo;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;

import static com.github.pagehelper.page.PageMethod.startPage;

/**
 * 活动备注服务实现类
 * 处理活动备注的创建、查询、更新、删除等核心业务逻辑
 */
@Service
public class ActivityRemarkServiceImpl implements ActivityRemarkService {
    /**
     * 活动备注数据访问对象
     * 用于与数据库交互，执行活动备注相关的CRUD操作
     */
    @Resource
    private TActivityRemarkMapper tActivityRemarkMapper;

    /**
     * 创建活动备注
     * @param activityRemarkQuery 包含活动ID和备注内容的查询对象
     * @return 数据库影响行数
     */
    @Override
    public int addActivityRemark(ActivityRemarkQuery activityRemarkQuery) {
        // 创建新的备注实体
        TActivityRemark tActivityRemark = new TActivityRemark();

        // 设置关联活动ID
        tActivityRemark.setActivityId(activityRemarkQuery.getActivityId());
        // 设置备注内容
        tActivityRemark.setNoteContent(activityRemarkQuery.getNoteContent());
        // 记录创建时间为当前时间
        tActivityRemark.setCreateTime(new Date());
        // 获取当前登录用户ID作为创建人
        tActivityRemark.setCreateBy(LoginInfoUtil.getCurrentLoginUser().getId());

        // 执行数据库插入操作（选择性插入非空字段）
        int count = tActivityRemarkMapper.insertSelective(tActivityRemark);

        return count; // 返回影响行数
    }

    /**
     * 分页查询活动备注
     * @param current 当前页码
     * @param activityId 关联活动ID
     * @return 分页结果对象
     */
    @Override
    public PageInfo<TActivityRemark> getActivityRemarkByPage(Integer current, Integer activityId) {
        // 启动分页（每页5条）
        startPage(current, 5);
        // 执行分页查询
        List<TActivityRemark> tActivityRemarkList = tActivityRemarkMapper.selectActivityRemarkByPage(activityId);
        // 封装分页结果
        PageInfo<TActivityRemark> pageInfo = new PageInfo<>(tActivityRemarkList);
        return pageInfo;
    }

    /**
     * 更新活动备注信息
     * <p>根据备注ID更新指定活动的备注内容，并记录最后编辑人和编辑时间</p>
     * @param activityRemarkQuery 包含备注ID和新内容的查询对象，需包含activityRemarkId和noteContent字段
     * @return int 数据库更新操作影响的行数，1表示更新成功，0表示未找到对应记录
     * @see ActivityRemarkQuery#getActivityRemarkId()
     * @see ActivityRemarkQuery#getNoteContent()
     */
    @Override
    public int updateActivityRemark(ActivityRemarkQuery activityRemarkQuery) {
        // 实例化活动备注实体对象（用于数据传输）
        TActivityRemark tActivityRemark = new TActivityRemark();

        // 设置备注ID（用于定位要更新的记录）
        tActivityRemark.setId(activityRemarkQuery.getActivityRemarkId());
        // 设置更新后的备注内容（前端传入的新内容）
        tActivityRemark.setNoteContent(activityRemarkQuery.getNoteContent());
        // 设置最后编辑时间（当前系统时间戳）
        tActivityRemark.setEditTime(new Date());
        // 设置最后编辑人ID（从登录上下文获取当前操作用户）
        tActivityRemark.setEditBy(LoginInfoUtil.getCurrentLoginUser().getId());

        // 调用Mapper层执行更新操作（返回影响行数）
        return tActivityRemarkMapper.updateActivityRemark(tActivityRemark);
    }

    /**
     * 根据ID查询活动备注详情
     * <p>通过主键ID查询活动备注的完整信息，包括创建人、创建时间等完整字段</p>
     * @param id 备注记录的主键ID，非空
     * @return TActivityRemark 备注实体对象，包含所有字段信息；若不存在则返回null
     */
    @Override
    public TActivityRemark getActivityRemarkDetailById(Integer id) {
        // 调用Mapper层根据主键查询单条记录
        return tActivityRemarkMapper.selectByPrimaryKey(id);
    }

    /**
     * 根据ID删除活动备注
     * <p>执行物理删除操作，直接从数据库中移除指定ID的备注记录</p>
     * @param id 备注记录的主键ID，非空
     * @return int 数据库删除操作影响的行数，1表示删除成功，0表示未找到对应记录
     * @warning 此操作不可逆，请确保删除前已进行权限校验和数据备份
     */
    @Override
    public int deleteActivityRemarkById(Integer id) {
        // 调用Mapper层根据主键删除记录（返回影响行数）
        return tActivityRemarkMapper.deleteByPrimaryKey(id);
    }
}